package com.advance.context;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyAnnotationConfigApplicationContext extends AnnotationConfigApplicationContext {

	public MyAnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
		super(annotatedClasses);
	}

	/**
	 * @1: refresh()  -->  prepareRefresh()  --> initPropertySources()  留给子类覆盖
	 *
	 * @2: initPropertySources 正符合 Spring 的开放式结构设计，给用户最大扩展 Spring 的能力
	 * 用户可以根据自身的 initPropertySources 方法，并在方法中进行个性化的属性处理及设置
	 *
	 * @3: 假如有一个这样的需求，工程在运行过程中用到的某个设置 (例如 VAR) 是从系统环境
	 * 中取得的，而如果用户没有在系统环境变量中配置这个参数，那么工程可能不会工作。
	 */
	@Override
	protected void initPropertySources() {
		// 系统给环境中设置一个必要的属性("VAR")，如果在验证环节没有得到对应的属性值，抛出异常
		getEnvironment().setRequiredProperties("VAR");
	}
}
